package com.lang.generator.service;

import com.lang.generator.domain.dto.ContentDto;
import com.lang.generator.domain.dto.DataModelParseDto;
import com.lang.generator.domain.dto.TemplateDto;
import com.lang.generator.domain.dto.TemplateResultDto;
import com.lang.generator.domain.enums.TemplateTypeEnum;
import org.springframework.lang.Nullable;

import java.util.List;
import java.util.zip.ZipOutputStream;


/**
 * 模板服务
 *
 * @author zhangren
 * @date 2022/12/13
 */
public interface TemplateService {

    /**
     * 获取默认模板
     *
     * @param templateTypeEnum 模板类型枚举
     * @return {@link List}<{@link TemplateDto}>
     */
    List<TemplateDto> getDefaultTemplate(@Nullable TemplateTypeEnum templateTypeEnum);

    /**
     * 解析模板
     *
     * @param templateDtoList 模板dto列表
     * @param dataModelList   数据模型列表
     * @return {@link List}<{@link ContentDto}>
     */
    List<ContentDto> parseTemplate(List<TemplateDto> templateDtoList, List<DataModelParseDto> dataModelList);


    /**
     * 附加压缩流
     *
     * @param zipOutputStream 压缩输出流
     * @param contentDto      内容dto
     */
    void appendZipStream(ZipOutputStream zipOutputStream, ContentDto contentDto);

    /**
     * 得到模板列表
     *
     * @return {@link List}<{@link TemplateResultDto}>
     */
    List<TemplateResultDto> getTemplateList();
}
